package com.heihei.combine.applist;

import com.heihei.combine.util.DirFlagUtil;
import com.heihei.config.ConfigProperties;
import com.heihei.constant.MessageConstant;
import com.heihei.decompression.ComDemoExe;
import com.heihei.imgpreview.GeneratePreviewHtml;
import com.heihei.imgpreview.GeneratePreviewImg;
import com.heihei.util.FileUtilF;
import org.apache.commons.collections4.CollectionUtils;

import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 *  图包整理
 *
 * @version 1.0
 * @since JDK1.8
 * @author duanhengfei
 * @date 2021年01月31日 14:03:20
 */
public class SettleImgPackage {

    /**
     * 整理图包专用
     *
     * @param
     * @Return
     * @throws
     * @author duanhengfei
     * @date 2021年01月31日 13:39:55
     */
    public static void settleImgPackage() throws IOException {
        //生成html，再创建图片预览，再压缩
        System.out.println(">>开始整理图包，请输入图包的父级目录：");
        File validSrcDir = FileUtilF.getValidSrcDir();
        Integer flag = null;
        while (true) {
            flag = DirFlagUtil.getFlag();
            if(flag == 1) {
                settleImgPackageCurrentDir(validSrcDir);
                System.out.println(MessageConstant.EVERYTHING_IS_OK);
                break;
            } else if(flag == 2) {
                settleImgPackageParentDir(validSrcDir);
                System.out.println(MessageConstant.EVERYTHING_IS_OK);
                break;
            } else {
                System.out.println(MessageConstant.PARAM_ILLEGAL);
            }
        }
    }

    public static void settleImgPackageParentDir(File parentFileDir) throws IOException {
        File[] childDirList = parentFileDir.listFiles();
        //整理图包，不用outline
//        FileUtilF.outLineOneLevelFile(validSrcDir);
        for (File child : childDirList) {
            if(child.isFile()) {
                continue;
            }
            settleImgPackageCurrentDir(child);
        }
    }

    public static void settleImgPackageCurrentDir(File imgDir) throws IOException {
        //创建html预览
        GeneratePreviewHtml.createAllPreview(imgDir, -1);
        //创建img预览
        GeneratePreviewImg.createImgPreview(imgDir);
        //压缩（密码由控制台输入吧）
        ComDemoExe.comPress(imgDir, ConfigProperties.COM_PASSWORD);
        //为了以防万一，还是不做删除操作了，手动删除吧
//        FileUtilF.delMultiFolder(imgDir);
    }

    /**
     * 方法描述: 整理图包（整理子目录的包含P的子目录）
     *
     * @param flag 1表示整理图包，2表示删除图包
     * @Return
     * @throws
     * @author duanhengfei
     * @date 2021年02月10日 10:58:15
     */
    public static void settleChildrenImgPackageContainsP(int flag) throws IOException {
        if(flag != 1 && flag != 2) {
            return;
        }
        Integer dirFlag = DirFlagUtil.getFlag();
        //校验
        if(dirFlag != 1 && dirFlag != 2) {
            System.out.println(MessageConstant.PARAM_ILLEGAL);
            return;
        }
        if(dirFlag == 1) {
            startPackageCurrentDir(flag);
        } else {
            startPackageChildDir(flag);
        }
        System.out.println("OK");
    }

    private static void startPackageChildDir(int flag) throws IOException {
        System.out.println("请输入父级目录：");
        File fi = FileUtilF.getValidSrcDir();
//        File fi = new File("D:\\资料转存\\下载队列\\ImgAndVideo");
        File[] files = fi.listFiles();
        for (File file : files) {
            startPackageCurrentDir(file, flag);
        }
    }

    private static void startPackageCurrentDir(File currDir, int flag) throws IOException {
        if(currDir.isDirectory()) {
            for (File listFile : currDir.listFiles()) {
                if(listFile.isDirectory() && listFile.getName().contains("P")) {
                    //如果空文件夹，则直接删除
                    File[] childArr = listFile.listFiles();
                    if(childArr == null || childArr.length <= 0) {
                        listFile.delete();
                        continue;
                    }
                    //如果P文件夹内，图片数量少于指定张数，则不做处理
                    List<File> files = FileUtilF.readAllImgFile(listFile);
                    if(CollectionUtils.isEmpty(files) || files.size() < ConfigProperties.MIN_IMG_HANDLE_COUNT) {
                        continue;
                    }
                    if(flag == 1) SettleImgPackage.settleImgPackageCurrentDir(listFile);
                    if(flag == 2) FileUtilF.delMultiFolder(listFile);
                }
            }
        }
    }

    private static void startPackageCurrentDir(int flag) throws IOException {
        System.out.println("请输入目标目录：");
        File validSrcDir = FileUtilF.getValidSrcDir();
        startPackageCurrentDir(validSrcDir, flag);
    }
}
